/**
 * 给定一个数组，两个人轮流操作：
 * 第一个人：选择任意元素，将其数位颠倒并删除由此而来的前导零
 * 第二个人：选择任意两个元素，将其连接
 * 当数组中只存在一个元素时，第二个人就停止操作且整个过程结束
 * 剩下的这个数如果大于等于10^M则后手获胜。
 * 给定数组问胜负。
 * 先手就是要令剩下的数位越短越好，后手反之。
 * 因此先手必然优先选择更长的低位零进行颠倒，
 * 后手则选更长的低位零去连接
 * 因为先手走完必然有一个无后零的数，这个数必然被后手接在后面，
 * 因此后手每一步走完，必然可以保证其选中的低位零彻底保留，再也不会被先手删掉
 * 因此根据低位零的数量进行排序，交替选择即可
 */
#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std;

using llt = long long;
using vi = vector<int>;
using pii = pair<int, int>;
using vpii = vector<pii>;

string Ans[] = {"Sasha", "Anna"};

int N;
int M;
vi A;

int proc(){
    M += 1;
    vi vec; vec.reserve(N);

    llt target = 0;
    for(auto i : A){
        int k = 0;
        for(llt j=10;0==i%j;j*=10){
            ++k;
        }
        vec.push_back(k);

        while(i){
            i /= 10;
            ++target;
        }
    }
    if(target < M) return 1;

    vi idx(N);for(int i=0;i<N;++i)idx[i] = i;

    sort(idx.begin(), idx.end(), [&](int a, int b){
        return vec[a] > vec[b];    
    });

    for(int i=0;i<N;i+=2){
        target -= vec[idx[i]];
        if(target < M) return 1;
    }

    return 0;
}

void work(){
    cin >> N >> M;
    A.assign(N, {});
    for(auto & i : A) cin >> i;
    cout << (Ans[proc()]) << "\n";     
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int nofkase = 1;
	cin >> nofkase;
	while(nofkase--){	
        work();
	}
    return 0;
}